//使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
const fp = require('lodash/fp')
const { MayBe,Container} = require("./support")

let maybe = MayBe.of([5,6,1])

let ex1 =  (num) =>{
    let fn =  fp.map(fp.add(num))
    return maybe.map(fn)
}

console.log(ex1(3))

//实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do','ray','me','fa','so','la','ti','do'])
let ex2 = () => {
    return xs.map(fp.first)._value
}
console.log(ex2()) 

//实现一个函数ex3，使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function (x,o) {
  return MayBe.of(o[x])   
})
let user = {id:2,name:'Albert'}
let ex3 = () => {
    return safeProp('name',user).map(fp.first)._value
}
console.log(ex3())

//使用MayBe 重写 ex4
// let  ex4 = function(n){
//     if(n){
//         return parseInt (n)
//     }
// }

let  ex4 = function(n){
    let m1 = new MayBe(n)
    let m2 = m1.map(parseInt)
    return m2._value
}
ex4() 
ex4(4)
